<?php
	
	/**
	*	myPrint
	*	
	*	Вывод отладочной информации
	*	@param mixing $obj - массив, объект, строка
	*/
	function myPrint( $obj, $title='myPrint' ){
		if(!debugOut()) return;
		
		$onclick = "onclick='var sd=this.nextSibling.style.display; this.nextSibling.style.display=sd==\"\"?\"none\":\"\"'";
		echo "<div style='cursor:pointer;' ".$onclick."><b>$title ...</b></div>"; 
		echo "<div style='display:none;'><pre>";
			echo "<div style='cursor:pointer;' ".$onclick."><b>print_r ...</b></div>"; 
				echo "<div style='display:'';'>"; 
					print_r($obj);
				echo "</div>";		
			echo "<div style='cursor:pointer;' ".$onclick."><b>var_dump ...</b></div>"; 
				echo "<div style='display:none;'>"; 
					var_dump($obj);
				echo "</div>";
			echo "<div style='cursor:pointer;' ".$onclick."><b>var_export ...</b></div>"; 
				echo "<div style='display:none;'>"; 
					var_export($obj);
				echo "</div>";
		echo "</pre>";
		echo "</div>";
	}
	

	/**
	*  redirect
	* 
	*  Функция перенаправления на другой url, требуется использовать до вывода данных в браузер
	*/
	if ( !function_exists('redirect') ) {

		function redirect( $url = '', $time = 0 ) {
			if ( $url == '' ) {
				$url = '/';
			}

			if ( ( strpos( strtolower( $url ), "http://" ) === FALSE ) &&
				( strpos( strtolower( $url ), "https://" ) === FALSE ) ) {

				$protocol = isset( $_SERVER['HTTPS'] ) && ( $_SERVER['HTTPS'] == 'on' ) ? 'https': 'http';

				if ( substr( $url, 0, 1 ) == '/' ) {
					$url = $protocol.'://'.$_SERVER['HTTP_HOST'].$url;
				} else {
					$url = $protocol.'://'.$_SERVER['HTTP_HOST'].'/'.$url;
				}
			}

			header( 'HTTP/1.1 303 See Other' );
			header( 'Location: '.$url );
		}
	}
	
	/**
	*  Функция перенаправления на другой url через javascript, уже после вывода данных в браузер
	*  @param string $adr - адрес
	*  @param string $doc='parent.'  для перезагрузки из фрейма например
	*/
	function redirect_js($adr, $doc='') { 
		echo '<script type="text/javascript">'.$doc.'location.replace("'.$adr.'");</script>'.
		'<noscript><meta http-equiv="refresh" content="1; url='.$adr.'"></noscript>';
		exit;
	}
	
	/**
	* _parse_url
	*	
	* Встроенный parse_url к сожалению работает не совсем корректно,
	* некоторые ссылки напрочь отказывается обрабатывать, что и привело
	* к написанию собственного парсера если встроенный не справится
	*/
	function _parse_url( $url ) {

		if ( ( $out = @parse_url( $url ) ) === false ) {

			$out = array();
			$query = "";

			if ( count( $parts = explode( "?", $url ) ) > 1 ) {
				$url = array_shift( $parts );
				$query = implode( "?", $parts );
			}

			if ( count( $parts = explode( "://", $url ) ) > 1 ) {

				if ( preg_match( '#([^A-Za-z0-9+-\.]+)#', $parts[ 0 ] ) == 0 ) {

					$out['scheme'] = array_shift( $parts );
					$url = implode( "://", $parts );

					$parts = explode( "/", $url );

					$out['host'] = array_shift( $parts );
					$url = count( $parts ) > 0 ? "/".implode( "/", $parts ) : "";

					$parts = explode( "@", $out['host'] );
					$out['host'] = array_pop( $parts );

					if ( count( $p = explode( ":", $out['host'] ) ) > 1 ) {
						$out['host'] = array_pop( $p );
						$parts = $p;
					}

					if ( ( $parts = implode( "@", $parts ) ) !== "" ) {
						$parts = explode( ":", $parts );
						$out['user'] = array_shift( $parts );
						if ( $out['user'] === "" ) {
							unset( $out['user'] );
						}

						if ( $parts = implode( ":", $parts ) ) {
							$out['pass'] = $parts;
						}
					}
				} else {
					$url = implode( "://", $parts );
				}
			}

			if ( $url !== "" ) {
				$out['path'] = $url;
			}

			if ( $query !== "" ) {
				$parts = explode( "#", $query );
				$out['query'] = array_shift( $parts );

				if ( count( $parts ) > 0 ) {
					$out['fragment'] = implode( "#", $parts );
				}
			}

		}

		return $out;
	}
	
	/**
	*	Создает массив файлов и директорий типа:
	*
	*<code>
*Array(
*    [Z:/home/zero/www/core] => Array
*        (
*            [Z:/home/zero/www/core/Auth.class.php] => Auth.class.php
*            [Z:/home/zero/www/core/Banner.class.php] => Banner.class.php
*            [Z:/home/zero/www/core/lang] => Array
*                (
*                    [Z:/home/zero/www/core/lang/russian.php] => russian.php
*                )
*		...
	*</code>
	*	@param string $dir директория
	*	@param boolean $show_files показывать файлы
	*	@param boolean $recurs флаг рекурсии
	*	@return array
	*/
	function files_array($dir, $show_files = true, $recurs = false ) {
	 $result_array = array();
	 $PS = '/';
	 if ($dh = opendir($dir)){
		while (($file = readdir($dh)) !== false) {
			if ($file=='..' || $file=='.') continue;
			
			if( $charset = mb_detect_encoding($file, "UTF-8,WINDOWS-1251") ) {
				$_file = iconv($charset, "utf-8", $file);//конвертим, а надо ли?...
			} else {
				$_file = $file;
			}
		
		// Если папка и рекурсия, входим в рекурсию
		if ( is_dir( $dir.$PS.$file ) ) {
			if( !$recurs ){
				$result_array[$dir][ $dir.$PS.$_file ]=array();
			}else {//входим в рекурсию
				$files = files_array( $dir.$PS.$file, $recurs, $show_files);
				$result_array[$dir][ $dir.$PS.$_file ]=is_array(reset($files))? reset($files) : array() ;
			}
		}
		else // Если -  файл
		if($show_files){
				$result_array[$dir][$dir.$PS.$file]=$_file;
			}
		}
		closedir($dh);
	  }
	  return $result_array;
	}
?>